package com.biz.primus.ms.payment.channel.allinpay.req;

import com.biz.primus.common.utils.JsonUtils;
import com.biz.primus.ms.payment.channel.allinpay.lang.AllInPayKeys;
import com.biz.primus.ms.payment.channel.allinpay.res.AllInPayQueryRespVo;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.Getter;
import lombok.Setter;
import org.springframework.web.client.RestTemplate;

import java.util.TreeMap;
import java.util.TreeSet;
import java.util.UUID;

/**
 * AllInPayRefundQuery
 *
 * @author JKLiues
 * @date 2017年11月10日
 */
@Getter
@Setter
public class AllInPayQuery extends AllInPayRequestBase{
    private static final String API_URL = "https://vsp.allinpay.com/apiweb/unitorder/query";
    /**
     * 商户号	平台分配的商户号
     */
    private String cusid;
    /**
     * 应用ID	平台分配的APPID
     */
    private String appid;
    /**
     * 版本号	接口版本号
     */
    private String version;
    /**
     * 交易订单号
     */
    private String reqsn;
    /**
     * 随机字符串	随机生成的字符串
     */
    private String randomstr = UUID.randomUUID().toString();
    /**
     * 平台交易流水	支付的收银宝平台流水
     */
    private String trxid;


    public AllInPayQueryRespVo execute(String sign) {
        TreeMap<String, Object> map = new TreeMap<>();
        map.put("cusid", this.cusid);
        map.put("appid", this.appid);
        map.put("version", this.version);
        map.put("reqsn", this.reqsn);
        map.put("trxid", this.trxid);
        map.put("randomstr", this.randomstr);
        map.put("sign", sign);
        RestTemplate restTemplate = getRestTemplate();
        String s = restTemplate.postForObject(getApiUrl(), map, String.class);
        return JsonUtils.json2Obj(s, AllInPayQueryRespVo.class);
    }

    @Override
    protected String getApiUrl() {
        return API_URL;
    }

    @Override
    public TreeSet<String> getSignParams() {
        return Sets.newTreeSet(Lists.newArrayList(
                AllInPayKeys.APPID,
                AllInPayKeys.CUSID,
                AllInPayKeys.VERSION,
                AllInPayKeys.REQSN,
                AllInPayKeys.TRXID,
                AllInPayKeys.RANDOMSTR
        ));
    }

}